package main

import (
	"fmt"
	"os"
)

/*
用户注册登录系统
欢迎进入xx系统
1、注册
	用户名
	密码
	年龄

2、登录
	用户名
	密码
*/

//面向过程的编程 -- 思维模式，做什么事情，实现功能
// 面向对象的编程 -- 着重于谁去做
//结构体设定 -- 属性、方法
//后续维护管理、迭代更新都方便很多

type User struct {
	UserName    string
	UserPasswd  string
	UserAddress string
	UserAge     string
}
type System struct {
	SysName string
	SysUser map[string]User
}

//绑定登陆注册方法
//接受用户名，密码

func main() {
	sys1 := System{
		SysName: "购物系统",
		SysUser: map[string]User{},
	}
	sys2 := System{
		SysName: "生鲜系统",
		SysUser: map[string]User{},
	}

	for {
		fmt.Println("1、购物系统\n2、生鲜系统")
		var syschoice int
		var choice int
		var sys System
		fmt.Scanln(&syschoice)
		if syschoice == 1 {
			sys = sys1
		} else {
			sys = sys2
		}
		fmt.Println("欢迎进入", sys.SysName)
		fmt.Println("1、注册\n2、登录\n3、退出")
		fmt.Println("请输入你的选择：")
		fmt.Scanln(&choice)
		switch choice {
		case 1:
			user := User{}
			fmt.Println("请输入用户名：")
			fmt.Scanln(&user.UserName)
			fmt.Println("请输入密码：")
			fmt.Scanln(&user.UserPasswd)
			fmt.Println("请输入年龄：")
			fmt.Scanln(&user.UserAge)
			fmt.Println("请输入住址：")
			fmt.Scanln(&user.UserAddress)
			sys.Regist(user)
		case 2:
			var name string
			var passwd string
			fmt.Println("请输入用户名")
			fmt.Scanln(&name)
			fmt.Println("请输入密码")
			fmt.Scanln(&passwd)
			sys.Login(name, passwd)
		case 3:
			os.Exit(0)
		default:
			fmt.Println("请做出正确的选择！")
		}
	}
}
func (s *System) Regist(u User) {
	_, ok := s.SysUser[u.UserName]
	if !ok {
		s.SysUser[u.UserName] = u
	} else {
		fmt.Println("注册失败，该用户名已经存在！")
	}
}
func (s *System) Login(name string, passwd string) {
	user, ok := s.SysUser[name]
	if ok {
		if user.UserName == name && user.UserPasswd == passwd {
			fmt.Printf("登录成功!\n你的基本信息如下%+v\n", user)
		} else {
			fmt.Println("登录失败，密码错误！")
		}
	} else {
		fmt.Println("账号不存在！")
	}
}
